#ifndef SYSTEMMAIN_H
#define SYSTEMMAIN_H

#include <QMainWindow>
#include <QStackedWidget>
#include <QMenuBar>
#include <QToolBar>
#include <QStatusBar>
#include <QLabel>
#include <QAction>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QPushButton>
#include <QSplitter>
#include <QListWidget>
#include <QWidget>
#include <QTimer>
#include <QMessageBox>
#include "loginui.h"
#include "customerui.h"
#include "cartui.h"
#include "orderui.h"
#include "menuui.h"
#include "ratingwidget.h"
#include "adminui.h"
#include "../business/usermanager.h"
#include "../business/menumanager.h"
#include "../business/ordermanager.h"
#include "../business/ratingmanager.h"
#include "../business/reorderservice.h"

// 使用命名空间
using namespace RestaurantSystem;

/**
 * @brief 系统主界面类
 * 
 * 提供模块化的主界面框架，支持：
 * - 用户角色切换
 * - 模块界面切换
 * - 状态栏信息显示
 * - 菜单栏和工具栏
 * - 用户会话管理
 */
class systemMain : public QMainWindow
{
    Q_OBJECT

public:
    /**
     * @brief 界面模块枚举
     */
    enum class UIModule {
        Welcome = 0,         // 欢迎页面
        CustomerMenu = 1,    // 顾客菜单浏览
        CustomerCart = 2,    // 顾客购物车
        UserCenter = 3,      // 用户个人中心
        AdminMenu = 4,       // 管理员菜单管理
        AdminOrder = 5,      // 管理员订单管理
        AdminRating = 6,     // 管理员评价查看
        AdminStats = 7       // 管理员统计
    };

    explicit systemMain(QWidget *parent = nullptr);
    ~systemMain();

    /**
     * @brief 设置当前登录用户信息
     * @param role 用户角色
     * @param userId 用户ID
     * @param username 用户名
     */
    void setCurrentUser(LoginUI::UserRole role, const QString &userId, const QString &username);

    /**
     * @brief 切换到指定模块
     * @param module 目标模块
     */
    void switchToModule(UIModule module);

public slots:
    /**
     * @brief 处理用户登出
     */
    void handleLogout();

    /**
     * @brief 处理退出应用
     */
    void handleExit();

    /**
     * @brief 显示关于对话框
     */
    void showAbout();

    /**
     * @brief 刷新状态栏信息
     */
    void refreshStatusBar();

    /**
     * @brief 更新统计数据显示
     */
    void updateStatisticsDisplay();

private slots:
    /**
     * @brief 处理模块切换
     */
    void onModuleSwitchRequested();

    /**
     * @brief 处理导航列表点击
     */
    void onNavigationItemClicked();
    
    /**
     * @brief 处理重新下单请求
     * @param order 原订单信息
     */
    void handleReorderRequest(const Order& order);
    
    /**
     * @brief 处理重新下单完成
     * @param result 重新下单结果
     */
    void handleReorderCompleted(const ReorderResult& result);

private:
    /**
     * @brief 初始化界面
     */
    void initializeUI();

    /**
     * @brief 创建菜单栏
     */
    void createMenuBar();

    /**
     * @brief 创建工具栏
     */
    void createToolBar();

    /**
     * @brief 创建状态栏
     */
    void createStatusBar();

    /**
     * @brief 创建中央界面
     */
    void createCentralWidget();

    /**
     * @brief 创建导航面板
     */
    void createNavigationPanel();

    /**
     * @brief 创建欢迎页面
     */
    QWidget* createWelcomePage();
    
    /**
     * @brief 创建用户个人中心页面
     */
    QWidget* createUserCenterPage();
    
    /**
     * @brief 创建管理员统计页面
     */
    QWidget* createAdminStatsPage();
    
    /**
     * @brief 显示用户管理界面 (管理员专用)
     */
    void showUserManagementInterface();
    
    /**
     * @brief 显示用户个人中心界面 (顾客专用)
     */
    void showUserCenterInterface();

    /**
     * @brief 应用样式表
     */
    void applyStyleSheet();
    
    /**
     * @brief 设置字体，解决中文渲染问题
     */
    void setupFonts();

    /**
     * @brief 更新界面状态
     */
    void updateUIState();

    /**
     * @brief 设置窗口属性
     */
    void setupWindow();

    /**
     * @brief 根据用户角色重新创建菜单栏和工具栏
     */
    void recreateMenuAndToolBar();

    /**
     * @brief 为顾客创建美观的标题栏
     */
    void createCustomerTitleBar();

    /**
     * @brief 更新顾客欢迎信息
     */
    void updateCustomerWelcomeMessage();

    /**
     * @brief 为顾客界面重新组织中央widget布局
     */
    void reorganizeCentralWidgetForCustomer();

private:
    // 业务逻辑管理器
    UserManager *m_userManager;
    MenuManager *m_menuManager;
    OrderManager *m_orderManager;
    RatingManager *m_ratingManager;
    ReorderService *m_reorderService;

    // 用户信息
    LoginUI::UserRole m_currentRole;
    QString m_currentUserId;
    QString m_currentUsername;

    // 主界面组件
    QWidget *m_centralWidget;
    QHBoxLayout *m_mainLayout;
    QSplitter *m_mainSplitter;

    // 导航面板
    QListWidget *m_navigationList;
    QWidget *m_navigationPanel;

    // 内容区域
    QStackedWidget *m_contentStack;

    // 菜单栏
    QMenu *m_fileMenu;
    QMenu *m_viewMenu;
    QMenu *m_helpMenu;

    // 动作
    QAction *m_logoutAction;
    QAction *m_exitAction;
    QAction *m_aboutAction;
    QAction *m_refreshAction;

    // 工具栏
    QToolBar *m_mainToolBar;

    // 状态栏
    QLabel *m_userLabel;
    QLabel *m_roleLabel;
    QLabel *m_timeLabel;
    QLabel *m_statusLabel;

    // 模块页面
    QWidget *m_welcomePage;
    CustomerMenuUI *m_customerMenuPage;
    CustomerCartUI *m_customerCartPage;
    QWidget *m_userCenterPage;
    AdminMenuWidget *m_adminMenuPage;
    OrderManagementUI *m_adminOrderPage;
    RatingViewWidget *m_adminRatingPage;
    QWidget *m_adminStatsPage;
    
    // 用户个人中心组件
    UserInfoWidget *m_userInfoWidget;
    OrderHistoryWidget *m_orderHistoryWidget;
    UserSettingsWidget *m_userSettingsWidget;
    RatingWidget *m_ratingWidget;
    
    // 用户管理组件 (管理员专用)
    UserManagementWidget *m_userManagementWidget;

    // 统计组件 (管理员专用)
    OrderStatisticsWidget *m_orderStatisticsWidget;

    // 定时器
    QTimer *m_statusTimer;

    // 当前模块
    UIModule m_currentModule;

    // 顾客标题栏组件
    QWidget *m_customerTitleBar;
    QLabel *m_titleLogoLabel;
    QLabel *m_welcomeLabel;
    QPushButton *m_logoutButton;
};

#endif // SYSTEMMAIN_H
